using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._NetworkAnalystTools._NetworkDataset
{
    /// <summary>
    /// <para>Create Network Dataset From Template</para>
    /// <para>Creates a new network dataset with the schema contained in the input template file (.xml). All the feature classes and input tables required for creating the network dataset must already exist before this tool is executed.</para>
    /// <para>使用输入模板文件 （.xml） 中包含的架构创建新的网络数据集。在执行此工具之前，创建网络数据集所需的所有要素类和输入表必须已存在。</para>
    /// </summary>    
    [DisplayName("Create Network Dataset From Template")]
    public class CreateNetworkDatasetFromTemplate : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CreateNetworkDatasetFromTemplate()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_network_dataset_template">
        /// <para>Network Dataset Template</para>
        /// <para>The template file (.xml) created by the Create Template From Network Dataset tool containing the schema of the output network dataset to be created.</para>
        /// <para>由从网络数据集创建模板工具创建的模板文件 （.xml），其中包含要创建的输出网络数据集的方案。</para>
        /// </param>
        /// <param name="_output_feature_dataset">
        /// <para>Output Feature Dataset</para>
        /// <para>The feature dataset containing the feature classes that will take part in the network dataset being created. The network will be created in this dataset using the name specified in the network dataset template.</para>
        /// <para>包含将参与正在创建的网络数据集的要素类的要素数据集。将使用网络数据集模板中指定的名称在此数据集中创建网络。</para>
        /// </param>
        public CreateNetworkDatasetFromTemplate(object _network_dataset_template, object _output_feature_dataset)
        {
            this._network_dataset_template = _network_dataset_template;
            this._output_feature_dataset = _output_feature_dataset;
        }
        public override string ToolboxName => "Network Analyst Tools";

        public override string ToolName => "Create Network Dataset From Template";

        public override string CallName => "na.CreateNetworkDatasetFromTemplate";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_network_dataset_template, _output_feature_dataset, _output_network];

        /// <summary>
        /// <para>Network Dataset Template</para>
        /// <para>The template file (.xml) created by the Create Template From Network Dataset tool containing the schema of the output network dataset to be created.</para>
        /// <para>由从网络数据集创建模板工具创建的模板文件 （.xml），其中包含要创建的输出网络数据集的方案。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Network Dataset Template")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _network_dataset_template { get; set; }


        /// <summary>
        /// <para>Output Feature Dataset</para>
        /// <para>The feature dataset containing the feature classes that will take part in the network dataset being created. The network will be created in this dataset using the name specified in the network dataset template.</para>
        /// <para>包含将参与正在创建的网络数据集的要素类的要素数据集。将使用网络数据集模板中指定的名称在此数据集中创建网络。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _output_feature_dataset { get; set; }


        /// <summary>
        /// <para>Output Network</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Network")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _output_network { get; set; }


        public CreateNetworkDatasetFromTemplate SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}